home *** CD-ROM | disk | FTP | other *** search
- /*
- XX_open.c - handle desk accessory open
- */
- #include "sd.h"
- #include "sc_seer_globals.h"
- #include <menumgr.h>
-
- int we_are_open=FALSE;
-
- void da_menu_on(void);
- void da_menu_on()
- {MenuHandle a_menu;
- a_menu=GetMenu(gl.res_base); /*read the menu from a resource file*/
- if(a_menu==NIL) /*report failure*/
- bomb(BOMB_nomenu,BMB_no_os,gl.res_base);
- mydce->dCtlMenu=gl.res_base; /*say we have our own menu*/
- InsertMenu(a_menu,0);
- DrawMenuBar(); /*the menu bar is set up, paint it*/
- }
-
- void one_time_init(void);
- void one_time_init()
- {long long_temp;
- /*compute our driver reference number, the installer
- may have changed it and it is funny under da shells
- */
- init_globals(); /* init globals common to da and program */
- MaxMem(&long_temp);
-
-
- da_refnum=mydce->dCtlRefNum;
- if(da_refnum < 0)
- da_refnum = -da_refnum;
- da_refnum = da_refnum - 1;
- gl.res_base = 0xc000 + da_refnum*32; /*our resource start here*/
- gl.win_ref_num=mydce->dCtlRefNum; /*set the kind field of program windows*/
-
- init_windef();
- da_menu_on();
- pdl_opn_res(); /*read in the pdl definition*/
-
- st_new_windef(); /*make the status display window*/
- sk_new_windef();
- pk_new_windef(); /*make the seer display window*/
-
- open_seer(); /*open the seer device*/
- load_seer(); /*match version*/
- configure_seer(); /*setup seers queues*/
-
- CloseDriver(-41);
- CloseDriver(-40);
- CloseDriver(-10);
- CloseDriver(-9); /*close the driver*/
- seer_on(); /*start data collection*/
- }
-
- int do_open()
- {if (mydce->dCtlStorage == 0) {
- SysBeep(3);
- return -23; /*return openErr*/
- }
- /*set flags saying what we implement*/
- mydce->dCtlFlags |= dNeedLock|dNeedGoodBye|dCtlEnable;
- mydce->dCtlDelay =0; /*call us as often as possible*/
-
- if(!we_are_open) {
- we_are_open=TRUE;
- one_time_init();
- }
-
- mydce->dCtlFlags |= dNeedTime; /*initilization done, get ticks*/
- return noErr;
- }
-
- int do_close()
- {mydce->dCtlFlags &= ~(dNeedLock|dNeedTime); /*no longer need to be locked*/
- if (mydce->dCtlStorage == 0) /*if storage is not valid*/
- return noErr; /*nothing to clean up*/
- if(we_are_open) {
- we_are_open=FALSE;
- close_seer(); /*close the seer device, bomb if we can't*/
- delete_my_windefs(); /*delete any windows I made*/
- if((gl.pdl_res !=0) &&
- (gl.pdl_res != -1)) {
- CloseResFile(gl.pdl_res); /*closing the file will relase its data*/
- gl.pdl_res=0;
- }
- if(gl.sp_header_q!=NIL) { /*seer header queue*/
- DisposPtr(gl.sp_header_q);
- gl.sp_header_q=NIL;
- }
- if(gl.sp_data_q!=NIL) { /*seer data queue*/
- DisposPtr(gl.sp_data_q);
- gl.sp_data_q=NIL;
- }
- }
- return noErr;
- }
-
-